
$(function(){

    //初始化动态表格
    $("#activeTableForStoreIn").dyActiveTable({
        idField: 'stirId',
        idFieldWidth: 60,
        index:"序号",
        columns: [
            {field: 'materialName', title: '材料名称', width: 150, height: 30, type: 'text', option: 'required:true, validType:\'length[1,18]\', prompt:\'请输入材料名称\', valueField:\'maId\', textField:\'materialInfo\', onChange: function(v,o){' +
                    'var url = CONTEXT_PATH + \'/material/findMaterial.do?materialName=\' + v;' +
                    '$(this).combobox(\'reload\', url)' +
                    '},' +
                    'onSelect: function(material){' +
                        'if(material != null){' +
                            'setMaterialValue(this, material);' +
                            '$.parser.parse(this);  ' +
                        '}' +
                    '}', class: 'easyui-combobox'},
            {field: 'brand', title: '材料品牌', width: 150, height: 30, type: 'text', option: 'validType:\'length[1,18]\', prompt:\'请输入品牌\'', class: 'easyui-textbox'},
            {field: 'standardType', title: '规格型号', width: 150, height: 30, type: 'text', option: 'required:true,validType:\'length[1,88]\', prompt:\'请输入规格型号\'', class: 'easyui-textbox'},
            {field: 'technicalParameter', title: '技术参数', width: 150, height: 30, type: 'text', option: 'validType:\'length[1,88]\', prompt:\'请输入技术参数\'', class: 'easyui-textbox'},
            {field: 'meteringUnit', title: '计量单位', width: 150, height: 30, type: 'text', option: 'validType:\'length[1,18]\', prompt:\'请输入计量单位\'', class: 'easyui-textbox'},
            {field: 'unitPrice', title: '采购单价(元)', width: 150, height: 30, type: 'text', option: 'required:true,validType:[\'floatOrInt\', \'length[1,18]\'], prompt:\'请输入采购单价\'', class: 'easyui-textbox'},
            {field: 'pushDate', title: '入库日期', width: 150, height: 30, type: 'text', option: 'prompt:\'请输入入库日期\'', class: 'easyui-datetimebox'},
            {field: 'storeNum', title: '入库数量', width: 120, height: 30, type: 'text', option: 'required:true,validType:[\'floatOrInt\', \'length[1,18]\'], prompt:\'请输入入库数量\'', class: 'easyui-textbox'},
            {field: 'remark', title: '入库备注', width: 200, height: 30, type: 'text', option: 'validType:\'length[1,100]\', prompt:\'请输入入库备注\'', class: 'easyui-textarea'}
        ]
    });

    //保存按钮点击事件
    $('#optionStoreIn').bind('click', function(){
        dooptionStoreInMethod();
    })

    //清空按钮点击事件
    $('#emptyTable').bind('click', function(){
        $("#activeTableForStoreIn").dyActiveTable("removeLine");
    })

    //导入确定按钮点击事件
    $('#importBtn').bind('click', function(){
        //获取easyui中的input中的实际的file文件
        var file = $("input[name='importExcel']")[0].files ? $("input[name='importExcel']")[0].files[0] : "noFile";

        //判断是否在IE下而无法获取file
        if(file == "noFile"){
            $.messager.show({ title:'提示', msg: '本功能需要高级浏览器支持,请使用IE11及以上浏览器或其他非IE内核浏览器！', timeout:3000, showType:"slide" });
            return false;
        }
        //判断是否选择文件
        if(!file){
            $.messager.show({ title:'提示', msg: '请选择要上传的文件！', timeout:3000, showType:"slide" });
            return false;
        }
        //判断文件格式
        if(file.name.substring(file.name.lastIndexOf("."), file.name.length) != ".xlsx"){
            $.messager.show({ title:'提示', msg: '文件必须是xlsx类型的！', timeout:3000, showType:"slide" });
            return false;
        }
        readWorkbookFromLocalFile(file, parseData);
    })
});

/**
 * 根据名称模糊搜索后，将搜索的内容自动的补全到此行的各个选框中
 * @param combobox
 * @param material
 */
function setMaterialValue(nameInput, material){
    var $nameInput = $(nameInput);

    setTimeout(function(){
        $nameInput.combobox('setValue', material.materialName);
        $nameInput.combobox('setText', material.materialName);
    }, 100);
    var $standardType = $nameInput.closest("tr").find("input[textboxname='standardType']").textbox('setValue', material.standardType);
    var $brand = $nameInput.closest("tr").find("input[textboxname='brand']").textbox('setValue', material.brand);
    var $meteringUnit = $nameInput.closest("tr").find("input[textboxname='meteringUnit']").textbox('setValue', material.meteringUnit);
    var $unitPrice = $nameInput.closest("tr").find("input[textboxname='unitPrice']").textbox('setValue', material.unitPrice);
}

//从读取到的excel中取解析数据，插入到表格中
function parseData(workbook){
    var sheetNames = workbook.SheetNames; // 工作表名称集合
    var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
    var json = XLSX.utils.sheet_to_json(worksheet);
    action(function(){
        $.messager.progress({
            title: '提示',
            msg: '数据加载中, 请稍候...',
            text: '',
            interval:0
        });
    })
    action(function(json){
        if(json.length == 0){
            action(closeProgress, null, 500);
        }
        for(var i=0; i < json.length; i++){
            setTimeout((function(i, json){
                return function(){
                    var rowData = json[i];
                    var jsonForAdd = {};
                    jsonForAdd["materialName"] = rowData["材料名称"];
                    jsonForAdd["brand"] = rowData["材料品牌"];
                    jsonForAdd["technicalParameter"] = rowData["技术参数"];
                    jsonForAdd["standardType"] = rowData["规格型号"];
                    jsonForAdd["meteringUnit"] = rowData["计量单位"];
                    jsonForAdd["unitPrice"] = rowData["采购单价(元)"];
                    jsonForAdd["pushDate"] = rowData["入库日期"];
                    jsonForAdd["storeNum"] = rowData["入库数量"];
                    jsonForAdd["remark"] = rowData["入库备注"];
                    var value = ((i + 1) / json.length * 100);
                    action(progressValue, value);
                    var param = [jsonForAdd, true]
                    $("#activeTableForStoreIn").dyActiveTable("addLine", param);
                    if(i == json.length - 1){
                        $("#activeTableForStoreIn").dyActiveTable("sortIndex");
                        action(closeProgress, null, 500);
                    }
                }
            })(i, json),i*100);
        }
    }, json);
}

function action(callback, param, time){
    setTimeout(callback(param), time);
}

/**
 * 更新进度条的显示值
 * @param value
 */
function progressValue(value){
    $.messager.progress("bar").progressbar("setValue", value);
}

/**
 * 关闭进度的显示
 */
function closeProgress(){
    $("#activeTableForStoreIn").dyActiveTable("removeLine", [1, 1]);
    $.messager.progress('close');
}

// 读取本地excel文件
function readWorkbookFromLocalFile(file, callback) {
    var reader = new FileReader();
    //判断redaer的readAsBinaryString方法是否存在
    if(reader.readAsBinaryString){
        reader.onload = function(e) {
            var data = e.target.result;
            var workbook = XLSX.read(data, {type: 'binary'});
            if(callback) callback(workbook);
        };
        reader.readAsBinaryString(file);
    }else{
        reader.readAsArrayBuffer(file);
        reader.onload = function(e){
            var bytes = new Uint8Array(e.target.result);
            var length = bytes.byteLength;
            var binary = "";
            for (var i = 0; i < length; i++) {
                binary += String.fromCharCode(bytes[i]);
            }
            var base64Str = btoa(binary);
            var workbook = XLSX.read(base64Str, {type: 'base64'});
            if(callback) callback(workbook);
        }.bind(this);
    }
}

/**
 * 执行保存操作方法
 */
function dooptionStoreInMethod(){
    var params = $("#operate_form").serialize();
    $("#operate_form").form("submit",{
        cache:false,
        data: params,
        url: CONTEXT_PATH + "/store/savePutByRkt.do",
        onSubmit:function() {
            var flag = $(this).form("validate");
            if(flag){
                preventSubmit(null, "optionStoreIn");
            }
            return flag;
        },
        success:function(data) {
            if(data){
                var obj = JSON.parse(data);
                var url = CONTEXT_PATH + "/store/index.do";
                saveJump(obj,url);
            }else{
                $.messager.show({ title:"系统提示", msg: "入库失败！", timeout:3000, showType:"slide" });
            }
        },
        error:function(){
            $.messager.show({ title:"系统提示", msg: "入库失败！", timeout:3000, showType:"slide" });
        }
    });
}